package day03.work02;

public class AreEqual {
    
public static boolean isEqual(Object a, Object b) {
    if (a == b) {
        return true;
    }
    if (a == null || b == null) {
        return false;
    }
    //基本数据类型
    if(a instanceof Integer){
            if (!(b instanceof Integer)) {
        return false;
    }
        return ((Integer)a).equals((Integer)b);
    }else if(a instanceof Double){
            if (!(b instanceof Double)) {
        return false;
    }
        double delta = 0.000001; // 精度范围
        return Math.abs(((Double)a) - ((Double)b)) < delta;
    }else if(a instanceof Float){
            if (!(b instanceof Float)) {
        return false;
    }
        // 处理float类型的精度问题
        float delta = 0.000001f;
         return Math.abs(((Float)a) - ((Float)b)) < delta;
    }else if(a instanceof Long){
            if (!(b instanceof Long)) {
        return false;
    }
        return ((Long)a).equals((Long)b);
    }else if(a instanceof Short){
            if (!(b instanceof Short)) {
        return false;
    }
        return ((Short)a).equals((Short)b);
    }else if(a instanceof Byte){
            if (!(b instanceof Byte)) {
        return false;
    }
        return ((Byte)a).equals((Byte)b);
    }else if(a instanceof Character){
            if (!(b instanceof Character)) {
        return false;
    }
        return ((Character)a).equals((Character)b);
    }else if(a instanceof Boolean){
            if (!(b instanceof Boolean)) {
        return false;
    }
        return ((Boolean)a).equals((Boolean)b);
    }
    //String
    else if(a instanceof String){
        return ((String)a).equals((String)b);
    }
    //其他引用数据类型
    else if(a instanceof Object){
        if(a.getClass()==b.getClass()){
            return a.equals(b);//重写的equals方法，这里展示一个Person类的引用数据类型
        }else return false;
    }
    return false;
}
}